package com.example.demo1.temp;

import org.junit.Test;

import java.util.Optional;

/**
 * @ClassName: OptionTest
 * @Description:
 * @Version: v1.0.0
 * @Author: tang
 * @Date: 2021/10/28
 * Modification History:
 * Date             Author      Version     Description
 * -------------------------------------------------------------
 * 2021/10/28      tang       v1.0.0      创建
 */
public class OptionTest {
    /**------------------------
     * Optional.of(T t)：创建一个 Optional 实例
     * Optional.empty(T t)：创建一个空的 Optional 实例
     * Optional.ofNullable(T t)：若 t 不为 null，创建 Optional 实例，否则空实例
     * isPresent()：判断是否包含某值
     * orElse(T t)：如果调用对象包含值，返回该值，否则返回 t
     * orElseGet(Supplier s)：如果调用对象包含值，返回该值，否则返回 s 获取的值
     * map(Function f)：如果有值对其处理，并返回处理后的 Optional，否则返回 Optional.empty()
     * flatmap(Function mapper)：与 map 相似，要求返回值必须是 Optional
     * -----------------------**/
    @Test
    public void Test(){
        Optional<Person> op = Optional.of(new Person());
        Person p = op.get();
        System.out.println(p);
    }

    @Test
    public void Test2(){
        Optional<Person> op1 = Optional.ofNullable(null);
        Person p1 = op1.orElse(new Person(11));
        System.out.println(p1);

        System.out.println("----------------");

        Person p2 = op1.orElseGet(() -> {
            System.out.println("进一步操作");
            return new Person(12);
        });
        System.out.println(p2);

    }

    @Test
    public void test3(){
        Optional <Person> op = Optional.ofNullable(null);
        Optional<String> name = op.map(Person::getName);
        if (name.isPresent()){
            System.out.println(name.get());
        }

        System.out.println("----------------------");

        Optional<String> name2 = op.flatMap(e -> Optional.ofNullable(e.getName()))  ;
        if (name2.isPresent()){
            System.out.println(name2.get());
        }
    }
 }
